#include "bluetooth_task.h"

TaskHandle_t bluetooth_handler;

// 暴露消息队列
extern QueueHandle_t configQueue;

// 检查消息是否合法
int checkMsgType(int type)
{
    return (type == MSG_TYPE_CONFIG || type == MSG_TYPE_NETWORK) ? 1 : 0;
}

/**
 * 蓝牙任务
 */
void bluetooth_task_init()
{
    // 初始化usart3
    usart3_init(9600);
}

// 任务启动函数
void bluetooth_task(void *param)
{
    // char data[200];
    while (1)
    {
        /*// 清空数据
        memset(data, 0, 200);
        printf("usart start \r\n"); 
        int index = 0;
        while (1)
        {
            // 从usart3种接收数据并控制LED灯
            while (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
            char res = USART_ReceiveData(USART3);
            //一直读空的情况不要
            if(res=='\0') continue; 
            //已经结束 
            if(res=='\n'){
                data[index] = '\0';
                break;
            }else{
                data[index] = res;
            }
            index ++;
        }
        printf("usart data : %s\r\n", data);*/

        // 获取原始数据
        char *infor = "{\"msgType\":1,\"content\":{\"state\":15,\"temp\":20,\"humi\":30,\"somke\":60,\"suns\":80}}";
        // 解析消息类型
        int msgType = parseMsgType(infor);
        // 检查消息是否合法
        if (checkMsgType(msgType))
        {
            // 使用消息队列传送数据给配置模块
            if (xQueueSend(configQueue, &infor, portMAX_DELAY) == pdTRUE)
            {
                printf("send msg to configQueue success \r\n");
            }else
            {
                printf("send msg to configQueue error \r\n");
            }
            
        }else
        {
            // 消息类型不合法
            printf("msgTypr error \r\n");
        }
        

        vTaskDelay(1000);
    }  
}

// 程序启动函数
void bluetooth_task_create()
{
    // 创建任务
    BaseType_t res = xTaskCreate(bluetooth_task, "bluetooth_task", 128, NULL, 2, &bluetooth_handler);
    if (res == pdPASS)
    {
        printf("bluetooth_task create success!\r\n");
    }
}  